SageMaker Studio スペースにタグを付与する
はじめに
コンサルティング部の神野です。
SageMaker Studio スペースにコスト配分タグを付与して、対象のスペースにどれぐらい費用が掛かっているのか確認したいケースがあったのですが、コンソール上からはタグを設定できる項目がなく、スペース自体にタグを付与できないのか?と気になりました。
公式ドキュメントを確認すると、タグを伝播させる(補足③を参照)かスペースにタグを付与できると記載があり、GUIではできないが、AWS CLIで設定できるのではと思い試してみました。
公式ドキュメントから引用
既存のドメイン、ユーザープロファイル、スペースAddTagsAPIにカスタムタグを追加するには、次のように を使用する必要があります。
aws sagemaker add-tags \
--resource-arn resource-arn-to-attach-tags \
--tags Key=key, Value=value
やってみた
前提
- ドメイン・タグを付与したいスペースは作成済み
- コスト配分タグ
CmBillingGroup
を使用
1. 対象SpaceのARNを取得
下記コマンドを実行して、タグを設定したいスペースのARNを確認します。
- ドメインID:作成したスペースのドメインID
- スペース名:タグを設定したいスペース名
aws sagemaker describe-space --space-name <スペース名> --domain-id <ドメインID>
取得結果イメージ
SpaceArn
で対象スペースのARNが取得可能で、手順2.で使用します。
{
"DomainId": "XXX",
"SpaceArn": "arn:aws:sagemaker:ap-northeast-1:<アカウントID>:space/<ドメインID>/sampleA",
"SpaceName": "sampleA",
"Status": "InService",
"LastModifiedTime": "2024-11-07T22:20:34.087000+00:00",
"CreationTime": "2024-11-07T22:20:28.818000+00:00",
"SpaceSettings": {
"AppType": "JupyterLab",
"SpaceStorageSettings": {
"EbsStorageSettings": {
"EbsVolumeSizeInGb": 5
}
}
},
"OwnershipSettings": {
"OwnerUserProfileName": "default-20241108T071632"
},
"SpaceSharingSettings": {
"SharingType": "Private"
},
"Url": "https://xxx.studio.ap-northeast-1.sagemaker.aws/jupyterlab/default"
}
2. 対象のスペースにタグを付与
下記コマンドを実行して、対象のスペースにタグを付与します。
- resource-arn:1. で取得したARN
- Key:CmBillingGroup
- Value:設定したい値(ex.space-space名など)
aws sagemaker add-tags --resource-arn <1. で取得したARN> --tags Key=CmBillingGroup,Value=<設定したい値>
取得結果イメージ
{
"Tags": [
{
"Key": "CmBillingGroup",
"Value": "space-sampleA"
}
]
}
以上でタグの設定は完了です!実際にコスト配分タグが機能しているか確認してみます。
確認
AWS Cost Explorerからも確認できますが、今回は弊社メンバーズの画面から料金を確認します。
今回スペースを2つ作成し、space-sampleA
とspace-sampleB
をそれぞれタグを付与して料金を可視化してみました!
コスト配分タグが機能していることを確認できました!
おわりに
SageMaker Studio スペースにタグを付与する方法はいかがだったでしょうか。GUIから設定できないのは少し不便ですが、スペース自体にタグを付与することは可能で、コスト配分タグで対象スペースの料金を可視化することができました!
本記事が少しでも参考になったら幸いです!最後までご覧いただきありがとうございました!
補足
①CloudFormationでタグを付与する方法
対象スペースにタグを付与する方法として他にはCloudFormationでスペースを作成する際に、Tags
プロバティを下記のように設定することでタグの付与が可能となります。
JupyterLabSpace:
Type: AWS::SageMaker::Space
Properties:
DomainId: !GetAtt StudioDomain.DomainId
SpaceName: !Ref SpaceName
SpaceDisplayName: JupyterLab
OwnershipSettings:
OwnerUserProfileName: !Ref UserProfileName
SpaceSharingSettings:
SharingType: Private
SpaceSettings:
AppType: JupyterLab
JupyterLabAppSettings:
DefaultResourceSpec:
InstanceType: !Ref InstanceType
SageMakerImageVersionArn: XXX
SpaceStorageSettings:
EbsStorageSettings:
EbsVolumeSizeInGb: !Ref EbsVolumeSizeGb
# タグを設定可能
Tags:
- Key: CmBillingGroup
Value: space-sampleA
②タグ付与を実行するシェル
タグ付与までの一連の流れを自動化したものが下記シェルとなります。
シェルを実行する前にドメインIDとドメイン名を設定し、実行後はタグのValueにはspace-<space名>
が設定されます。
- DOMAIN_ID:設定したいスペースのドメインID
- SPACE_NAME:設定したいスペース名
実行し、Completed: Tag verification successful
が表示されたらタグ付与が成功完了です。
#!/bin/bash
# 変数定義
## ドメインIDを設定(要設定)
DOMAIN_ID="xxx"
## Space名を設定(要設定)
SPACE_NAME="YYY"
EXPECTED_TAG_KEY="CmBillingGroup"
EXPECTED_TAG_VALUE="space-${SPACE_NAME}"
# Space の情報を取得
echo "Checking space details..."
SPACE_ARN=$(aws sagemaker describe-space \
--space-name "$SPACE_NAME" \
--domain-id "$DOMAIN_ID" \
--query 'SpaceArn' \
--output text)
if [ -z "$SPACE_ARN" ]; then
echo "Error: Could not get Space ARN"
exit 1
fi
# タグを追加
echo "Adding tag..."
aws sagemaker add-tags \
--resource-arn "$SPACE_ARN" \
--tags "Key=$EXPECTED_TAG_KEY,Value=$EXPECTED_TAG_VALUE"
# タグが正しく設定されたか確認
echo "Verifying tags..."
TAG_VALUE=$(aws sagemaker list-tags \
--resource-arn "$SPACE_ARN" \
--query "Tags[?Key=='$EXPECTED_TAG_KEY'].Value" \
--output text)
if [ "$TAG_VALUE" == "$EXPECTED_TAG_VALUE" ]; then
echo "Completed: Tag verification successful"
echo "Tag Key: $EXPECTED_TAG_KEY"
echo "Tag Value: $TAG_VALUE"
exit 0
else
echo "Error: Tag verification failed"
echo "Expected: $EXPECTED_TAG_VALUE"
echo "Got: $TAG_VALUE"
exit 1
fi
③ドメインやユーザープロファイルのタグを伝播させて、リソースにタグを付与する
下記ブログを参考に、ドメインやユーザープロファイルのタグを伝播させてスペースに反映させることも可能です。
ユーザープロファイルにコスト配分タグを付与して、タグの伝播を有効化することでスペースにユーザープロファイルと同様のタグを付与することも可能です。
タグの伝播を有効にする方法
ユーザープロファイルにタグを付与する方法